<!doctype html>
<!--[if lt IE 7]> <html class="lt-ie10 lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie10 lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie10 lt-ie9" lang="en"> <![endif]-->
<!--[if IE 9]>    <html class="lt-ie10" lang="en"> <![endif]-->
<!--[if !IE]><!--><html lang="en"> <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=1024">
  <meta http-equiv="Accept-CH" content="Viewport-Width">  <!-- Dexecure -->

  <title>CodeCombat - Learn how to code by playing a game</title>
  <meta name="description" content="Learn programming with a multiplayer live coding strategy game for beginners. Learn Python or JavaScript as you defeat ogres, solve mazes, and level up. Open source HTML5 game!">

  <meta property="og:title" content="CodeCombat: Learn to Code by Playing a Game">
  <meta property="og:url" content="http://codecombat.com">
  <meta property="og:type" content="game">
  <meta property="og:image" content="http://codecombat.com/images/pages/home/play_img.png">
  <meta property="og:site_name" content="CodeCombat">

  <meta name="twitter:card" content="summary">
  <meta name="twitter:title" content="CodeCombat: Learn to Code by Playing a Game">
  <meta name="twitter:url" content="http://codecombat.com">
  <meta name="twitter:site" content="CodeCombat">
  <meta name="twitter:image:src" content="http://codecombat.com/images/pages/base/logo_square_250.png">
  <meta name="twitter:description" content="Learn programming with a multiplayer live coding strategy game for beginners. Learn Python or JavaScript as you defeat ogres, solve mazes, and level up. Open source HTML5 game!">

  <link href="https://plus.google.com/115285980638641924488" rel="publisher" />
  <link rel="shortcut icon" href="/images/favicon.ico">
  <link rel="stylesheet" href="/shaTag/stylesheets/app.css">
  <link href='//fonts.googleapis.com/css?family=Merriweather' rel='stylesheet' type='text/css'>

  <script>
    var DEXECURE_URL = "/dexecure-c167a5675c.js";
    "serviceWorker"in navigator&&navigator.serviceWorker.register(DEXECURE_URL,{scope:'/'}).then(function(e){"/"!=new URL(e.scope).pathname&&console.log("Service worker scope is not /")})["catch"](function(e){console.log("Unable to register service worker.");console.log(e)});

    // IMPORTANT: If you edit here, make sure app/assets/javascripts/run-tests.js puts in placeholders for
    // running client tests on Travis.
    window.serverConfig = "serverConfigTag";
    window.userObject = "userObjectTag";
    window.serverSession = "serverSessionTag";
    window.features = "featuresTag";
    window.me = {
        get: function(attribute) { return window.userObject[attribute]; }
    }
    // Placeholder for iPad, which inspects the user object at the bottom of an injected page.

  </script>

  <!-- Google Analytics -->
  <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    ga('create', 'UA-39724129-1', 'auto');
  </script>
  <!-- Rollbar -->
  <script>
var _rollbarConfig = {
    accessToken: "f02e5906a39f409fb51d12491651399f",
    captureUncaught: true,
    payload: {
        environment: "environmentTag",
        client: {
          javascript: {
            source_map_enabled: true,
            code_version: "shaTag",
            guess_uncaught_frames: true
          }
        }
    }
};
!function(r){function e(t){if(o[t])return o[t].exports;var n=o[t]={exports:{},id:t,loaded:!1};return r[t].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var o={};return e.m=r,e.c=o,e.p="",e(0)}([function(r,e,o){"use strict";var t=o(1).Rollbar,n=o(2);_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://d37gvrvc0wt4s1.cloudfront.net/js/v1.9/rollbar.min.js";var a=t.init(window,_rollbarConfig),i=n(a,_rollbarConfig);a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,i)},function(r,e){"use strict";function o(r){return function(){try{return r.apply(this,arguments)}catch(e){try{console.error("[Rollbar]: Internal error",e)}catch(o){}}}}function t(r,e,o){window._rollbarWrappedError&&(o[4]||(o[4]=window._rollbarWrappedError),o[5]||(o[5]=window._rollbarWrappedError._rollbarContext),window._rollbarWrappedError=null),r.uncaughtError.apply(r,o),e&&e.apply(window,o)}function n(r){var e=function(){var e=Array.prototype.slice.call(arguments,0);t(r,r._rollbarOldOnError,e)};return e.belongsToShim=!0,e}function a(r){this.shimId=++c,this.notifier=null,this.parentShim=r,this._rollbarOldOnError=null}function i(r){var e=a;return o(function(){if(this.notifier)return this.notifier[r].apply(this.notifier,arguments);var o=this,t="scope"===r;t&&(o=new e(this));var n=Array.prototype.slice.call(arguments,0),a={shim:o,method:r,args:n,ts:new Date};return window._rollbarShimQueue.push(a),t?o:void 0})}function l(r,e){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){var o=e.addEventListener;e.addEventListener=function(e,t,n){o.call(this,e,r.wrap(t),n)};var t=e.removeEventListener;e.removeEventListener=function(r,e,o){t.call(this,r,e&&e._wrapped?e._wrapped:e,o)}}}var c=0;a.init=function(r,e){var t=e.globalAlias||"Rollbar";if("object"==typeof r[t])return r[t];r._rollbarShimQueue=[],r._rollbarWrappedError=null,e=e||{};var i=new a;return o(function(){if(i.configure(e),e.captureUncaught){i._rollbarOldOnError=r.onerror,r.onerror=n(i);var o,a,c="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(o=0;o<c.length;++o)a=c[o],r[a]&&r[a].prototype&&l(i,r[a].prototype)}return e.captureUnhandledRejections&&(i._unhandledRejectionHandler=function(r){var e=r.reason,o=r.promise,t=r.detail;!e&&t&&(e=t.reason,o=t.promise),i.unhandledRejection(e,o)},r.addEventListener("unhandledrejection",i._unhandledRejectionHandler)),r[t]=i,i})()},a.prototype.loadFull=function(r,e,t,n,a){var i=function(){var e;if(void 0===r._rollbarPayloadQueue){var o,t,n,i;for(e=new Error("rollbar.js did not load");o=r._rollbarShimQueue.shift();)for(n=o.args,i=0;i<n.length;++i)if(t=n[i],"function"==typeof t){t(e);break}}"function"==typeof a&&a(e)},l=!1,c=e.createElement("script"),d=e.getElementsByTagName("script")[0],p=d.parentNode;c.crossOrigin="",c.src=n.rollbarJsUrl,c.async=!t,c.onload=c.onreadystatechange=o(function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){c.onload=c.onreadystatechange=null;try{p.removeChild(c)}catch(r){}l=!0,i()}}),p.insertBefore(c,d)},a.prototype.wrap=function(r,e){try{var o;if(o="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._wrapped){r._wrapped=function(){try{return r.apply(this,arguments)}catch(e){throw e._rollbarContext=o()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e,e}},r._wrapped._isWrap=!0;for(var t in r)r.hasOwnProperty(t)&&(r._wrapped[t]=r[t])}return r._wrapped}catch(n){return r}};for(var d="log,debug,info,warn,warning,error,critical,global,configure,scope,uncaughtError,unhandledRejection".split(","),p=0;p<d.length;++p)a.prototype[d[p]]=i(d[p]);r.exports={Rollbar:a,_rollbarWindowOnError:t}},function(r,e){"use strict";r.exports=function(r,e){return function(o){if(!o&&!window._rollbarInitialized){var t=window.RollbarNotifier,n=e||{},a=n.globalAlias||"Rollbar",i=window.Rollbar.init(n,r);i._processShimQueue(window._rollbarShimQueue||[]),window[a]=i,window._rollbarInitialized=!0,t.processPayloads()}}}}]);
</script>

  <!-- Mixpanel -->
  <script type="text/javascript">
    (function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable time_event track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.union people.track_charge people.clear_charges people.delete_user".split(" ");for(g=0;g<i.length;g++)f(c,i[g]);b._i.push([a,e,d])};b.__SV=1.2;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src="undefined"!==typeof MIXPANEL_CUSTOM_LIB_URL?MIXPANEL_CUSTOM_LIB_URL:"file:"===e.location.protocol&&"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//)?"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js":"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f)}})(document,window.mixpanel||[]);
    mixpanel.init("e71a4e60db7e1dc5e685be96776280f9");
  </script>

  <script src="https://checkout.stripe.com/checkout.js"></script>

  <!-- IE9 doesn't support defer attribute: https://github.com/h5bp/lazyweb-requests/issues/42 -->
  <!--[if IE 9]>
  <script src="/shaTag/lib/ace/ace.js"></script>
  <script src="/shaTag/javascripts/box2d.js"></script>
  <script src="/shaTag/javascripts/vendor.js"></script>
  <script src="/shaTag/javascripts/aether.js"></script>
  <script src="/shaTag/javascripts/esper.js"></script>
  <script src="/shaTag/javascripts/app.js"></script>
  <![endif]-->
  <!-- IE9 cors support breaks analytics logging: http://caniuse.com/#feat=cors -->
  <!--[if IE 9]>
  <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.2/jquery.xdomainrequest.min.js"></script>
  <![endif]-->
  <![if (gt IE 9)|(!IE)]>
  <script src="/shaTag/lib/ace/ace.js" defer></script>
  <script src="/shaTag/javascripts/vendor.js" defer></script>
  <script src="/shaTag/javascripts/aether.js" defer></script>
  <script src="/shaTag/javascripts/esper.js" defer></script>
  <script src="/shaTag/javascripts/app.js" defer></script>
  <![endif]>
  <script>

    onLoad = function() {
      try {
        // IE10 warning
        var htmlElement = document.querySelector("html");
        if (htmlElement) {
          if ($.browser.msie && $.browser.versionNumber < 11) {
            if ((window.location.pathname || "").indexOf("web-dev-level") < 0) {
              alert("CodeCombat does not run in Internet Explorer 10 or older. Sorry!");
            }
          }
        }

        // IE8 can't handle this
        FastClick.attach(document.body);
        require('core/initialize');
      } catch (error) { }
    }
  </script>

</head>
<body class="clearfix" onload="onLoad();">
  <div id="fb-root"></div>

  <div id="page-container">
  </div>

  <div id="modal-wrapper" class="modal-content hide"></div>

  <div class="progress" id="module-load-progress">
    <div class="progress-bar"></div>
  </div>
</body>
</html>
